package cn.tedu.ykmall.admin.commodity.webapi.service;

import cn.tedu.ykmall.admin.commodity.service.ICommodityService;
import cn.tedu.ykmall.admin.commodity.webapi.mapper.CategoryMapper;
import cn.tedu.ykmall.admin.commodity.webapi.repository.ICategoryCacheRepository;
import cn.tedu.ykmall.pojo.commodity.vo.AdminCategoryDetailsVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

@Service
@Slf4j
public class CommodityService implements ICommodityService {
    @Value("${dirPath}")
    private String dirPath;

    @Autowired
    private CategoryMapper categoryMapper;

    @Autowired
    private ICategoryCacheRepository categoryCacheRepository;

    @Override
    public String upload(MultipartFile multipartFile) throws IOException {
        //得到文件原始文件名 a.jpg
        String fileName = multipartFile.getOriginalFilename();
        //得到后缀名 从最后一个.出现的位置截取到最后
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        //得到唯一文件名 UUID.randomUUID()+suffix;
        fileName = UUID.randomUUID()+suffix;
        //准备文件夹路径
        File dirFile = new File(dirPath);
        //判断文件夹是否存在
        if(!dirFile.exists())
            //不存在则创建文件夹
            dirFile.mkdirs();
        //得到文件的完整路径
        String filePath = dirPath+fileName;
        //把文件保持到此路径    异常抛出
        multipartFile.transferTo(new File(filePath));
        return fileName;
    }

    public void remove(String name){
        String filePath = dirPath +name;
        new File(filePath).delete();//删除文件
    }

    @Override
    public void preloadCache() {
        log.debug("删除缓存中的类别列表……");
        categoryCacheRepository.deleteList();
        log.debug("删除缓存中的各独立的类别数据……");
        categoryCacheRepository.deleteAllItem();

        log.debug("从数据库查询类别列表……");
        List<AdminCategoryDetailsVO> list = categoryMapper.list();

        for (AdminCategoryDetailsVO category : list) {
            log.debug("查询结果：{}", category);
            log.debug("将当前类别存入到Redis：{}", category);
            categoryCacheRepository.save(category);
        }

        log.debug("将类别列表写入到Redis……");
        categoryCacheRepository.save(list);
        log.debug("将类别列表写入到Redis完成！");
    }
}
